package factoryMethod;

import factoryMethod.product.ProductFactory;
import factoryMethod.product.TruckProductLine;
import factoryMethod.product.boatProductLine;
import factoryMethod.transport.Truck;
import factoryMethod.transport.boat;

public class FactorymethodTest {
    static ProductFactory productFactory;

    public static void main(String[] args) {
        String type="";
       if(args.length>=1){
           type = args[0];
           System.out.println("useful type line is "+type);
       }

        /**   ---来自https://refactoringguru.cn/design-patterns --工厂方法模式
         * 1.  所有的执行动作都交给工厂类的工厂方法执行。
         *      产品的自定义特性逻辑，放在工厂类的同名方法中执行。
         */
        if("truck".equals(type)){
           productFactory = new TruckProductLine();
       }else if("boad".equals(type)){
           productFactory = new boatProductLine();
       }else{
           System.out.println("can not get useful type");
           System.exit(0);
       }
       productFactory.deliver();


        System.out.println("----------give Class-------------");
        /**  ---{《设计模式之禅》--工厂模式}
         * 2.工厂类提供创建指定产品的实例
         *      各产品实例各自执行自己的功能。
         */
        boat boat = productFactory.getTransport(boat.class);
        boat.deliver();

        Truck truck = productFactory.getTransport(Truck.class);
        truck.deliver();
    }
}
